package main

import "fmt"

func main() {
	/*
		匿名：没有名字
			匿名函数：没有名字的函数。

		定义一个匿名函数，直接进行调用。通常只能使用一次。也可以使用匿名函数赋值给某个函数变量，那么就可以调用多次了。

		匿名函数：
			Go语言是支持函数式编程：
			1.将匿名函数作为另一个函数的参数，回调函数
			2.将匿名函数作为另一个函数的返回值，可以形成闭包结构。

		匿名函数：
			1.可以直接赋值给函数变量
			2.可以当作实参
			3.可以作为返回值
			4.可以直接被调用
	*/
	ff1()
	ff2 := ff1
	ff2()

	//匿名函数
	func() {
		fmt.Println("我是一个匿名函数。。")
	}()

	ff3 := func() {
		fmt.Println("我也是一个匿名函数。。")
	}
	ff3()
	ff3()

	//定义带参数的匿名函数
	func(a, b int) {
		fmt.Println(a, b)
	}(1, 2)

	//定义带返回值的匿名函数
	res1 := func(a, b int) int {
		return a + b
	}(10, 20) //匿名函数调用了，将执行结果给 res1，res1 是int类型的
	fmt.Println(res1) // 30

	res2 := func(a, b int) int {
		return a + b
	} // 将你们就是的值，赋值给 res2，res2 是函数类型的，可以调用
	fmt.Println(res2)

	fmt.Println(res2(100, 200)) //300
}

func ff1() {
	fmt.Println("我是ff1()函数。。")
}
